﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Collections;
using Entidad;
namespace Datos
{
    public class clsUsuarioDAO
    {
        HotelSionEntities bd= new HotelSionEntities();


        public List<T_S_USUARIO> listarUsuarios()
        {

            List<T_S_USUARIO> lista = new List<T_S_USUARIO>();
            try
            {
                var q = from c in bd.T_S_USUARIO
                        select c;
                lista = q.ToList();

            }
            catch (Exception)
            {
            }
            return lista;
        }



        public bool Insertar(T_S_USUARIO Obj)
        {
            try
            {
                bd.AddObject("T_S_USUARIO", Obj);
                bd.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public bool Modificar(T_S_USUARIO obj)
        {
            try
            {
                bd.AttachTo("T_S_USUARIO", obj);
                bd.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                bd.SaveChanges();
            }
            catch (Exception)
            {
                return false;

            }
            return true;
        }

        public bool Eliminar(T_S_USUARIO obj)
        {
            try
            {
                bd.AttachTo("T_S_USUARIO", obj);
                bd.DeleteObject(obj);
                bd.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

       public bool Actualiza_EstadoUsuario(string estado, string id_usuario)
        {
            try
            {
                bd.ExecuteStoreCommand("update T_S_USUARIO set ind_estado='" + estado + "' where des_usuario='" + id_usuario + "'");

                return true;
            }
            catch
            {
                return false;
            }
        }
        
        public bool PA_insertarUsuGrupo(string ID_USUARIO, int ID_GRUPO)
        {
            try
            {
            bd.ExecuteStoreCommand("exec USP_SAVE_USUARIOGRUPO '" + ID_USUARIO + "'," + ID_GRUPO);
            return true;
            }
            catch
            {

                return false;
            }


            

        }
        
        public bool PA_delteUsuGrupo(string ID_USUARIO)
        {

            try
            {

            bd.ExecuteStoreCommand("exec USP_DELETE_USUARIOGRUPO '" + ID_USUARIO + "'");
            return true;
            }
            catch 
            {
                return false;
                
            }








        }
        
        
        public string EncriptarPassword(string password)
        {

            try
            {
            bd.ExecuteStoreCommand("exec USP_ENCRIPTAR_PASSWORD '" + password+"'");
            return password;
            }
            catch (Exception)
            {

                return null;
               
            }

           
           
           
           

           

        }
        
        public bool DescencriptarPassword(string id_usuario,string des_password)
        {

            try
            {

            bd.ExecuteStoreCommand("update T_S_USUARIO set des_password='" + des_password + "'where des_usuario='"+id_usuario+"'");

            return true;
            }
            catch 
            {
                return false;
            }







        }

        public string EncriptarPasswordUser(string PASWORD)
        {
            string var = "";
            try
            {
                List<string> lis = bd.USP_ENCRIPTAR_PASSWORD(PASWORD).ToList();
                var =lis[0].ToString();
             
            }
            catch (Exception)
            {
                return "";
            }

            return var;
        }

        public string DesEncriptarUser(string PASWORD)
        {


            try
            {
                List<string> lis = bd.USP_DESENCRIPTAR_PASSWORD(PASWORD).ToList();

                return lis[0].ToString();
            }
            catch (Exception)
            {

                return null;
            }


        }

        public List<T_S_USUARIO> listarUser(string username)
        {
            List<T_S_USUARIO> lista = new List<T_S_USUARIO>();
            try
            {
                var q = from c in bd.T_S_USUARIO
                        where c.ID_USUARIO == username
                        select c;
                lista = q.ToList();

            }
            catch (Exception)
            {
            }
            return lista;

        }






      
        

            public string GenerarPass(int LongPassMin, int LongPassMax)
            {
               

               Random ram = new Random();
                int LogitudPass = ram.Next(LongPassMin, LongPassMax);
                string Password = String.Empty;



                try
                {

                    char[] ValorAleatorio = { 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '!', '#', '$', '%', '&', '?', '+' };

                    for (int i = 0; i < LogitudPass; i++)
                {
                    int rm = ram.Next(0, 2);

                    if (rm == 0)
                    {
                        Password += ram.Next(0, 10);
                    }
                    else
                    {
                        Password += ValorAleatorio[ram.Next(0, 59)];
                    }
                }
                }catch{}



                while (Password.Length < 6)
                {

                    Password = GenerarPass(LongPassMin, LongPassMax);
                }

                while (Password == "")
                {
                    Password = GenerarPass(LongPassMin, LongPassMax);
                }



                 return Password;

  }



            //public List<T_S_USUARIO> listaEmail(string des_email)
            //{

            //    List<T_S_USUARIO> list = new List<T_S_USUARIO>();

            //    try
            //    {
            //        var q = (from u in bd.T_S_USUARIO
            //                where u.DES_EMAIL == des_email
            //                select u).Take(1);


            //        list = q.ToList();
            //    }
            //    catch
            //    {}


            //    return list;

            //}



            public bool actualizarPassword(string password,string email) {


                try
                {
                    bd.ExecuteStoreCommand("UPDATE T_SEG_USUARIO SET DES_PASSWORD='" + password + "' where  DES_EMAIL='" + email + "'");
                    return true;
                }
                catch 
                {
                    return false;
                  
                }

               


            }

            //public List<T_S_USUARIO> listarFiltroTipoUsuarios(int idTipoUsuario)
            //{

            //    List<T_S_USUARIO> lista = new List<T_S_USUARIO>();
            //    try
            //    {
            //        var q = from u in bd.T_S_USUARIO
            //                where u.ID_TIPO_USUARIO == idTipoUsuario
            //                select u;
            //        lista = q.ToList();

            //    }
            //    catch (Exception)
            //    {
            //    }
            //    return lista;
            //}

            //public IEnumerable<Object> listaUsuariosEstadosActivosInactivos(string TipoUsuario, string Estado)
            //{
            //    IEnumerable<Object> listaUsuario = new List<Object>();
            //    try
            //    {

            //        var q = from c in bd.T_SEG_USUARIO
            //                from tgc in bd.T_MAE_TABLA_GENERAL_CAB
            //                from tgd in bd.T_MAE_TABLA_GENERAL_DET

            //                where tgc.ID_GENERAL_CAB==tgd.ID_GENERAL_CAB 
            //                && c.ID_TIPO_USUARIO==tgd.ID_GENERAL_DET 
            //                && tgc.NOM_TABLA == "TIPO DE USUARIO" 
            //                && tgd.DES_LARGA == TipoUsuario
            //                && c.IND_ESTADO == Estado 
            //                select new
            //                {
                                
            //                    c.DES_APELLIDOS,
            //                    c.DES_EMAIL,
            //                    c.DES_NOMBRE,
            //                    c.ID_TIPO_USUARIO,
            //                    c.ID_USUARIO,
            //                    c.IND_ESTADO,
            //                    DES_ESTADO = c.IND_ESTADO == "A" ? "Activo" :
            //                                c.IND_ESTADO == "I" ? "Inactivo" : "Inactivo",
                              
            //                    c.USR_CREACION,
            //                    tgd.DES_LARGA,
            //                    tgd.DES_CORTA,
            //                    c.DES_PASSWORD


            //                };
            //        listaUsuario = q.ToList();
            //    }
            //    catch(Exception ex)
            //    {
            //        throw ex;
            //    }
            //    return listaUsuario;
            //}

            public List<T_S_USUARIO> TraerEmail(string idusuario)
            {

                {
                    var q = (from u in bd.T_S_USUARIO
                             where u.ID_USUARIO == idusuario
                             select u).Take(1);
                    return q.ToList();
                }

            }





            public bool InsertarT_SEG_USUARIO_OFICINA(string ID_USUARIO, int ID_ORG_VTA, int ID_OFI_VTA)
            {

                try
                {
                    bd.ExecuteStoreCommand("INSERT INTO T_SEG_USUARIO_OFICINA (ID_USUARIO,ID_ORG_VTA,ID_OFI_VTA) VALUES ( '" + ID_USUARIO + "'," + ID_ORG_VTA + "," + ID_OFI_VTA+" )");
                    return true;
                }
                catch (Exception)
                {

                    return false;
                }

         }




            public IEnumerable<Object> listaUsuariosEstadosActivosInactivos(string TipoUsuario, string Estado)
            {
                IEnumerable<Object> listaUsuario = new List<Object>();
                try
                {

                    var q = from c in bd.T_S_USUARIO        
                            from p in bd.TD_PERSONAL

                            where  c.IND_ESTADO == Estado
                            && c.ID_USUARIO==p.COD_PERSONAL
                            && c.ID_USUARIO==TipoUsuario
                            select new
                            {

                                p.COD_PERSONAL,
                                p.DES_NOMBRE,
                                p.DES_APELLIDOS,
                                p.DES_DIRECCION,
                                p.DES_DNI,
                                c.ID_USUARIO,
                                c.IND_ESTADO,
                                DES_ESTADO = c.IND_ESTADO == "1" ? "Activo" :
                                            c.IND_ESTADO == "0" ? "Inactivo" : "Inactivo",

                                p.DES_EMAIL,
                                p.DES_ESTADO_CIVIL,
                                p.DES_SEXO,
                                c.DES_PASSWORD


                            };
                    listaUsuario = q.ToList();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return listaUsuario;
            }



            public IEnumerable<Object> CargarTipoUsuarios() {

                IEnumerable<Object> list = new List<Object>();
                try
                {
                    var q = (from c in bd.T_S_USUARIO
                            select new {c.ID_USUARIO }).Distinct();
                    //select new {c.TIPO_USUARIO }).Distinct();
                    list = q.ToList();
                }
                catch (Exception)
                {
                    
                    throw;
                }

                return list;
            }





        }
}
